package com.afdor.rws.event.channel.client.producer;

import com.afdor.rws.event.Event;
import com.afdor.rws.event.Serialization;
import com.afdor.rws.event.channel.filter.EventIntercept;
import lombok.NonNull;

/**
 * 事件生产者
 *
 * @author 悭梵
 * @date Created in 2018-08-07 15:07
 */
public interface EventProducer {

    /**
     * 初始化
     *
     * @return
     */
    EventProducer init();

    /**
     * 销毁
     */
    void destroy();

    /**
     * 返回序列化器-用于事件传输
     *
     * @return
     */
    @NonNull
    Serialization getSerialization();

    /**
     * 设置序列化器-用于事件传输
     *
     * @param serialization
     * @return
     */
    EventProducer setSerialization(@NonNull Serialization serialization);

    /**
     * 发送单条事件
     *
     * @param event
     */
    EventProducer sendEvent(@NonNull Event event);

    /**
     * 添加拦截器
     *
     * @param addIntercept
     * @return
     */
    EventProducer addIntercept(@NonNull EventIntercept addIntercept);
}
